package IO;

import javax.swing.*;
import javax.swing.plaf.IconUIResource;
import java.io.File;
import java.io.IOException;
import java.util.LinkedList;
import java.util.Queue;

/**
 * 遍历文件夹
 */
public class TraverseFolders {
    public static void main(String[] args) throws Exception {
        File f1=new File("D:\\桌面文件\\java课程\\课程资料");
       traversalDepthFirst(f1);
        traversalBroadFirst(f1);
    }

    /**
     * 深度优先的遍历
     */
    private static void traversalDepthFirst(File dir) throws Exception{
        //找到该目录下的所有孩子
        File[] f1=dir.listFiles();
        if (f1==null){
            return;
        }
        //针对该目录在的孩子判断是目录还是普通文件
        for (File file : f1) {
            //如果是目录就机组递归遍历，目录前面加上[D]标志
            if (file.isDirectory()){
                System.out.println("[D]"+file.getCanonicalPath());
                traversalDepthFirst(file);
            }else {
                //走到这里的都是普通文件，用[F]标志
                System.out.println("[F]"+file.getCanonicalPath());
            }
        }
    }

    /**
     * 广度优先的遍历
     * @param dir
     */
    private static void traversalBroadFirst(File dir) throws IOException {
        //使用队列进行层序优先的遍历
        Queue<File> queue=new LinkedList<>();
        queue.offer(dir);
        while (!queue.isEmpty()){
            File poll=queue.poll();
            if (poll.isDirectory()){
                System.out.println("[D]"+poll.getCanonicalPath());
            }else {
                System.out.println("[F]"+poll.getCanonicalPath());
            }
            if (poll.isDirectory()) {
                File[] f1 = poll.listFiles();
                if (f1 == null) {
                    continue;
                }
                for (File file : f1) {
                   queue.offer(file);
                }
            }

         }
    }
}
